import { defineStore } from 'pinia'
import { reactive, ref, toRaw, useAttrs } from 'vue';
import { login_API, getUserInfo_API, getRouteList_API } from '@/apis/user';

/**
 * 用户数据管理
 */
export const useUserStore = defineStore('user', 
() => {
  // 用户信息-状态
  // const test = ref(1);
  // let state = reactive({
  //   userInfo: { 
  //     accountName: '',
  //     userName: '',
  //     id: -1,
  //     identity: -1,
  //     department: '',
  //   }
  // });

  const userInfo = reactive({
    accountName: '',
    userName: '',
    id: -1,
    identity: -1,
    department: '',
  });
  
  /**
   * 更新用户数据
   * @param data 新的用户数据
   * @returns 
   */
  const actionUpdateUserInfo = (data:object) => { 
    Object.assign(userInfo, {...data});

    // state.userInfo = {
    //   ...state.userInfo, 
    //   ...data 
    // }
    // userInfo = {
    //   ...userInfo,
    //   ...data,
    // }
  }

  /**
   * 用户登录
   * @param accountName 
   * @param accountPassword 
   */
  const actionLogin = async (accountName:string, accountPassword:string) => {
    try {
      const resUserInfo = await login_API(accountName, accountPassword);
      if (resUserInfo) {
        actionUpdateUserInfo(toRaw(resUserInfo));
        // 本地化存储
        sessionStorage.setItem('userInfo', JSON.stringify(resUserInfo));
        return true
      }
      return false;
    } catch (error) {
      console.log(error);
      return false;
    }
  }

  /**
   * 获取用户信息（通过解析传递过来的token）
   * @param token 
   */
  const actionGetUserInfo =async (token:string) => {
    try {
      const resUserInfo = await getUserInfo_API(token);
      if (resUserInfo) {
        // 有值，更新state数据
        actionUpdateUserInfo(resUserInfo);
        // 返回用户信息
        return resUserInfo;
      }
      return null;
    } catch (error) {
      console.log(error,'获取用户信息失败-action');
      return null;
    }
  }

  /**
   * 获取路由列表（根据用户身份）
   * @param identity （1 | 0）
   */
  const actionGetRouteList =async (identity:number) => {
    try {
      const routeList = await getRouteList_API(identity);
      if (routeList) {
        // 将路由列表存储在本地
        sessionStorage.setItem('routeList', JSON.stringify(routeList));
        return true;
      }
      return null;
    } catch (error) {
      console.log(error,'获取路由列表失败-仓库');
      return null;
    }
  }

  /**
   * 重置token，删除本地存储的用户信息token
   */
  const actionResetToken = async () => {
    sessionStorage.removeItem('token');
    return;
  }

  return {
    // state,
    userInfo,
    actionLogin,
    actionUpdateUserInfo,
    actionGetUserInfo,
    actionGetRouteList,
    actionResetToken,
  }
}, {
  // 本次化存储插件设置
  // persist: {
  //   enabled: true,
  //   strategies: [
  //     {
  //       key: 'userInfo',
  //       storage: sessionStorage,
  //       paths: ['userInfo']
  //     }
  //   ]
  // }
});
